import json
import logging
import textwrap
import time

from langchain_text_splitters import RecursiveCharacterTextSplitter

from message_management.case_utils.document_case import CaseDocument
# from myApp.utils.FuZiModel import model, tokenizer, run_fuzi
# from myApp.utils.ChatGlmModel import run_glm
from utils.ApiModel import ollama_chat, fuzi_chat, fuzi_stop, ollama_chat_all

# from utils.ChatGlmModel import run_glm_all, run_glm
from utils.model_api import ModelAPI

task_1_prompt = """
请根据下面的模板生成起诉书：
××××人民检察院 
起 诉 书
××检××未刑诉〔20××〕×号 

原告人……
诉讼代表人……
被告人……
本案由×××（侦查机关）侦查终结，以被告单位×××涉嫌××罪，被告人×××涉嫌××罪，于××××年××月××日向本院移送审查起诉。本院受理后，于××××年××月××日已告知被告单位、被告人有权委托辩护人和认罪认罚可能导致的法律后果，××××年××月××日已告知被害人及其法定代理人（近亲属）（被害单位及其诉讼代表人）、附带民事诉讼的当事人及其法定代理人有权委托诉讼代理人，依法讯问了被告人，听取了被告单位的辩护人（值班律师）、被告人的辩护人（值班律师）、被害人及其诉讼代理人的意见，审查了全部案件材料。……（写明退回补充调查/侦查、延长审查起诉期限等情况）。被告单位、被告人同意本案适用速裁／简易／普通程序审理。
经依法审查查明：……（写明经检察机关审查认定的犯罪事实包括犯罪时间、地点、经过、手段、目的、动机、危害后果，以及被告人到案后自愿如实供述自己的罪行，与被害人达成和解协议或者赔偿被害人损失，取得被害人谅解等与定罪、量刑有关的事实要素。应当根据具体案件情况，围绕刑法规定的该罪的构成要件叙写。）
认定上述事实的证据如下：
……（针对上述犯罪事实，分别列举证据，包括犯罪事实证据和量刑情节证据）
上述证据收集程序合法，内容客观真实，足以认定指控事实。被告人×××对指控的犯罪事实和证据没有异议，并自愿认罪认罚。
本院认为，……（分别概述被告单位、被告人行为的性质、危害程度、情节轻重），其行为触犯了《中华人民共和国刑法》第××条（引用罪状、法定刑条款），犯罪事实清楚，证据确实、充分，应当以××罪追究其刑事责任。被告单位×××、被告人×××认罪认罚，依据《中华人民共和国刑事诉讼法》第十五条的规定，可以从宽处理。……（阐述认定的法定、酌定量刑情节，并引用相关法律条款），建议判处被告单位、被告人……（阐述具体量刑建议）。根据《中华人民共和国刑事诉讼法》第一百七十六条的规定，提起公诉，请依法判处。

此致
×××人民法院 
                                 检  察  官 ×××
检察官助理 ×××

 （院印）
 20××年×月×日
根据下面案情信息帮我生成起诉书：
@用户输入@
注意：不知道的信息不用填写。
"""

llm = ModelAPI()


def generate_model(text):
    for data in llm.chat_stream(messages=task_1_prompt.replace("@用户输入@", text)):
        yield data  # 直接传递 run_glm 生成的每个字节流项
